package leetcode_day._2022._202202._2128;

/**
 * @author yzh
 * @version 1.0
 * @date 2022/2/21 12:36
 * 推多米诺
 * 算法：双指针
 * L.R --> L.R
 * L.L --> LLL
 * R.R --> RRR
 * R.L --> R.L
 * L..R --> L..R
 * L..L --> LLLL
 */
public class _21_838 {
    public static void main(String[] args) {
        System.out.println(new _21_838().pushDominoes(".L.R...LR..L.."));
        System.out.println(new _21_838().pushDominoes("L..L"));
    }

    public String pushDominoes(String dominoes) {
        char[] arr = dominoes.toCharArray();
        int n = arr.length, l = 0, r;
        // L 设置为 'L', 当第一个骨牌为 '.' 时, 只有后面的牌为 'L' 时, 才改变牌的状态
        char L = 'L', R;
        while (l < n) {
            r = l;
            while (r < n && arr[r] == '.') ++r;
            R = r == n ? 'R' : arr[r];
            if (L == R) while (l < r) arr[l++] = L;
            // 如果左边是 'L', 右边是 'R', 就不需要改变了
            else if (L == 'R' && R == 'L') {
                int k = r - 1;
                while (l < k) {
                    arr[l++] = 'R';
                    arr[k--] = 'L';
                }
            }
            L = R;
            l = r + 1;
        }
        return new String(arr);
    }

}
